package cn.tedu.test.rabbitmq.controller;

import cn.tedu.test.rabbitmq.config.DeclareConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessagePropertiesBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
@Slf4j
public class SendController {
    //注入一个rabbitTemplate模版对象 构造过程初始化过程 所经历自动配置
    //和redisTemplate一模一样
    @Autowired
    private RabbitTemplate  rabbitTemplate;
    /**
     * 请求方式: get
     * 请求路径:/send
     * 请求参数:name
     * 返回值:String 返回ok
     */
    @GetMapping("/send")
    public String send(String name){
        //组织一个消息数据,发送到声明的组件 demo-ex demo-queue
        String message="hello:"+name;
        //底层api发送消息basicPublish("交换机","路由key",properties,body)
        //rabbitmq 可以利用现成方法 实现任何对象序列化和消费反序列化
        Message msg = MessageBuilder.withBody(message.getBytes()).setHeader("myHeader","123")
                .build();
        rabbitTemplate.convertAndSend("demo-ex","demo-rk",msg);
        //如果想要在消息中 自定义一些properties属性 还有message头 需要构建message对象
        return "ok";
    }
    //发送延迟消息
    @GetMapping("/delay")
    public String delaySend(String name){
        String message="hello:"+name;
        rabbitTemplate.convertAndSend(DeclareConfig.BIZ_EX,"",message);
        log.info("发送时间:{}",new Date().toLocaleString());
        return "ok";
    }
}
